using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NCT.Framework;

namespace VISS.API.Users {

    /// <summary>
    /// Value of user gender
    /// </summary>
    public enum EUserGender : byte {
        /// <summary>
        /// 
        /// </summary>
        Female = 0,
        /// <summary>
        /// 
        /// </summary>
        Male = 1,
        /// <summary>
        /// 
        /// </summary>
        Unknown = 2
    }

    /// <summary>
    /// Value of user looking for gender
    /// </summary>
    public enum EUserLookingFor: byte {
        /// <summary>
        /// 
        /// </summary>
        Male = 1,
        /// <summary>
        /// 
        /// </summary>
        Female = 0,
        /// <summary>
        /// 
        /// </summary>
        All = 2
    }

    /// <summary>
    /// Value of quick search order type
    /// </summary>
    public enum EUserQuickSearchOrderType {
        /// <summary>
        /// 
        /// </summary>
        LastLogin = 1,
        /// <summary>
        /// 
        /// </summary>
        Random = 2
    }

    /// <summary>
    /// Contains info about user general profile
    /// </summary>
    [Serializable]
	public class UserGeneralProfileEnt {

		#region Properties

        /// <summary>
        /// Gets or sets the user key.
        /// </summary>
        /// <value>The user key.</value>
		public string UserKey { get; set; }
        /// <summary>
        /// Gets or sets the name.
        /// </summary>
        /// <value>The name.</value>
		public string Name { get; set; }
        /// <summary>
        /// Gets or sets the gender.
        /// </summary>
        /// <value>The gender.</value>
		public EUserGender Gender { get; set; }
        /// <summary>
        /// Gets or sets the birth date.
        /// </summary>
        /// <value>The birth date.</value>
		public DateTime BirthDate { get; set; }
        /// <summary>
        /// This field is calculated by DA class and not stored in DB.
        /// </summary>
        /// <value>The age.</value>
        public byte Age { get; set; }
        /// <summary>
        /// Gets or sets the city ID.
        /// </summary>
        /// <value>The city ID.</value>
		public short CityID { get; set; }
        /// <summary>
        /// This field is only used for display extra data.
        /// </summary>
        /// <value>The city.</value>
		public string City { get; set; }
        /// <summary>
        /// Gets or sets the country ID.
        /// </summary>
        /// <value>The country ID.</value>
		public short CountryID { get; set; }
        /// <summary>
        /// This field is only used for display extra data.
        /// </summary>
        /// <value>The country.</value>
		public string Country { get; set; }
        /// <summary>
        /// Gets or sets the education ID.
        /// </summary>
        /// <value>The education ID.</value>
		public short EducationID { get; set; }
        /// <summary>
        /// This field is only used for display extra data.
        /// </summary>
        /// <value>The education.</value>
		public string Education { get; set; }
        /// <summary>
        /// Gets or sets the job ID.
        /// </summary>
        /// <value>The job ID.</value>
		public short JobID { get; set; }
        /// <summary>
        /// This field is only used for display extra data.
        /// </summary>
        /// <value>The job.</value>
		public string Job { get; set; }
        /// <summary>
        /// Gets or sets the hobby.
        /// </summary>
        /// <value>The hobby.</value>
		public string Hobby { get; set; }
        /// <summary>
        /// Gets or sets the looking for.
        /// </summary>
        /// <value>The looking for.</value>
		public EUserLookingFor LookingFor { get; set; }
        /// <summary>
        /// Gets or sets the image count.
        /// </summary>
        /// <value>The image count.</value>
		public int ImageCount { get; set; }
        /// <summary>
        /// Gets or sets the archive point.
        /// </summary>
        /// <value>The archive point.</value>
		public int ArchivePoint { get; set; }
        /// <summary>
        /// Gets or sets the left point.
        /// </summary>
        /// <value>The left point.</value>
        public int LeftPoint { get; set; }
        /// <summary>
        /// Gets or sets the blast.
        /// </summary>
        /// <value>The blast.</value>
		public string Blast { get; set; }
        /// <summary>
        /// Gets or sets the trusted.
        /// </summary>
        /// <value>The trusted.</value>
		public int Trusted { get; set; }
        /// <summary>
        /// Gets or sets the date modified.
        /// </summary>
        /// <value>The date modified.</value>
		public DateTime DateModified { get; set; }

		#endregion

		#region Constructors

        /// <summary>
        /// Initializes a new instance of the <see cref="UserGeneralProfileEnt"/> class.
        /// </summary>
		public UserGeneralProfileEnt() {
			UserKey = string.Empty;
			Name = string.Empty;
			Gender = EUserGender.Male;
			BirthDate = DateTimeUtils.MinValue;
            Age = 0;
			CityID = 0;
			City = string.Empty;
			CountryID = 0;
			Country = string.Empty;
			EducationID = 0;
			Education = string.Empty;
			JobID = 0;
			Job = string.Empty;
			Hobby = string.Empty;
			LookingFor = EUserLookingFor.All;
			ImageCount = 0;
			ArchivePoint = 0;
            LeftPoint = 0;
			Blast = string.Empty;
			Trusted = 0;
			DateModified = DateTimeUtils.MinValue;
		}

		#endregion
	}
}